package com.dingzhen.msg.service.impl;

import com.dingzhen.entity.Msg;
import com.dingzhen.msg.mapper.MsgMapper;
import com.dingzhen.msg.service.MsgService;
import com.dingzhen.msg.service.SendService;
import com.dingzhen.utils.ResultSet;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

import java.util.Date;
import java.util.List;

@Service
public class MsgServiceImpl implements MsgService {
    private final SendService sendService;
    private final MsgMapper msgMapper;
    public MsgServiceImpl(SendService sendService, MsgMapper msgMapper) {
        this.sendService = sendService;
        this.msgMapper = msgMapper;
    }


    @Override
    public ResultSet sendMsg(Msg msg) {
        if (null == msg) {
            return ResultSet.error("msg不能为null");
        }
        if (null == msg.getCreateTime()) {
            msg.setCreateTime(new Date());
        }

        if (CollectionUtils.isEmpty(msg.getUserIdList())) {
            return ResultSet.error("请设置需要发送的用户id");
        }
        sendByUserIdList(msg.getUserIdList(), msg);
        return ResultSet.success("发送成功！");
    }

    public void sendByUserIdList(List<String> userIdList, Msg msg) {
        addMsgBatch(msg, userIdList);
    }

    @Override
    public void sendAll(Msg msg) {

    }
    @Override
    public void addMsgBatch(Msg msg, List<String> userIdList) {
        addMsg(msg);
        userIdList.forEach(userId -> sendUserMsg(userId, msg));
    }

    /**
     * 发送用户消息
     *
     * @param userId
     * @param msg
     */
    @Transactional(rollbackFor = Exception.class)
    public void sendUserMsg(String userId, Msg msg) {
        sendService.send(msg, userId);
    }

    @Override
    public void addMsg(Msg msg) {
        msgMapper.addMsg(msg);
    }

    @Override
    public void addUserMsg(Msg msg, String userId) {

    }

    @Override
    public List<Msg> queryMsg(Msg msg) {
        return  msgMapper.queryUserMsgByParam(msg);
    }
}
